<?php
namespace Controller;
class PostControllerOutput {
	public $m_BloggHtml = "";
}

class PostController {
	private static $PostId = "postId";
	private static $edit = "edit";
	public function DoControll(\Common\Database $db, \Model\BloggList $bloggList) {
		// Skapar Instaser och olika tomma variabler
		$messegeid = "";
		$messege = "";
		$loginHandler = new \Model\loginHandler($db);
		$commentH = new \Model\CommentHandler($db);
		$commentView = new \View\CommentView();
		$bloggView = new \View\BloggView();
		$bloggList = new \Model\BloggList($db);
		$blogg = \View\navigationView::getSelectedPost($bloggList, $db);
		$outPut = new \Controller\PostControllerOutput();
		$urlId = $blogg ->getPostId();

		// tittar om du försökt att radera en post
		if ($bloggView -> TriedToDelete() == true)
		{
			// beroende på om du har det skrivs olika medelande ut
			// Gick det bra skriver den ut ett meddelande och skicka dig till Index 
			$messegeid = $bloggList -> DeletePost($urlId);
			if ($messegeid == \Model\BloggList::POST_DELETED) {
				$messege .= $bloggView -> Message(\View\BloggView::POST_DELETED);
			}
			if ($messegeid == \Model\BloggList::POST_NOT_DELETED) {
				$messege .= $bloggView -> Message(\View\BloggView::POST_NOT_DELETED);
			}
			$outPut -> m_BloggHtml .= $messege;
			$outPut -> m_BloggHtml .= \View\NavigationView::Redirect(1, 'index.php');
			return $outPut;

		} 
		// ser om du tryckt på redigera och så skckar dig till edit sidan
		else if ($bloggView -> TriedToEdit())
		{
			\View\NavigationView::Location('?postId='.$urlId . '&edit');
		}
		//Genrerar Edit sidan om urlen har med "&edit"
		if (isset($_GET[self::$edit]))
		{
			if($loginHandler->IsLoggedIn()==true)
			{
				$outPut -> m_BloggHtml = $bloggView -> DoEditPost($blogg);
			}
			// ser om du försökt spara editsidan 
			if ($bloggView -> TriedToSubmitEdit())
			{
				// Lägger till det du redigerade i "modelen" 
				$messegeid = $bloggList -> EditPost($urlId, $bloggView->EditTitle(), $bloggView->EditPost(), $db);
				// ger meddelande till de variabler beronde på hur redigeringen gick
				if ($messegeid == \Model\BloggList::NOT_EMPTY) {
					$messege .= $bloggView -> Message(\View\BloggView::NOT_EMPTY);
				}
				if ($messegeid == \Model\BloggList::POST_SAVED) {
					$messege .= $bloggView -> Message(\View\BloggView::POST_SAVED);
					\View\NavigationView::Redirect(1, '?postId='.$urlId);
				}
				if ($messegeid == \Model\BloggList::POST_FAILED) {
					$messege .= $bloggView -> Message(\View\BloggView::POST_FAILED);
				}
				//Skriver ut det 	
				$outPut -> m_BloggHtml .= $messege;
				
				return $outPut;
			}
		}
		// Annars visar den posten vilket den kommer göra varje gång då användaren inte tryckt på edit 
		else if ($bloggView -> TriedToEdit()== false)
		{
			$outPut -> m_BloggHtml .= $bloggView -> showPost($blogg);
			// om du inte är in loggad kan du inte se redigerings knappen
			if($loginHandler->IsLoggedIn()==true)
			{
				$outPut -> m_BloggHtml .= $bloggView -> EditSelectedPost();
			}
			// skriver ut ett formulär för ny kommmentar
			$outPut -> m_BloggHtml .= $commentView -> DoNewComment();
			// kollar om du försökt att skicka den 
			if($commentView->TriedToSubmitComment()== true)
			{
				$messegeid = $commentH ->NewComment($urlId, $commentView->PostName(), $commentView ->PostComment());
				if ($messegeid == \Model\CommentHandler::NOT_EMPTY) {
					$messege .= $commentView -> Message(\View\commentView::NOT_EMPTY);
				}
				if ($messegeid == \Model\CommentHandler::COMMENT_PASSED) {
					$messege .= $commentView -> Message(\View\CommentView::COMMENT_PASSED);
				}
				if ($messegeid == \Model\CommentHandler::COMMENT_FAILED) {
					$messege .= $commentView -> Message(\View\CommentView::COMMENT_FAILED);
				}

				$outPut -> m_BloggHtml .= $messege;
			}
			//Visar alla komentarer för denna post genom att skicka in post idet
			$outPut -> m_BloggHtml .= $commentView -> ShowListOfComments($commentH->getCommentsFromPost($urlId));
			//kollar om du försökt att radera en kommentar  
			if($commentView ->Tried2DeleteComment()==true)
			{
				// raderar en kommentar genom att hämta idet från ett hidden feild i "vyn"
				$commentH -> DeleteComment($commentView->PostCommentID());
				\View\NavigationView::Location('?postId='.$urlId);
			}
			return $outPut;
		}
		//skriver ut slutgiltiga
		$outPut -> m_BloggHtml .= $messege;
		return $outPut;
	}

}


